Boolean
AND, OR, XOR, NOT, ...
AND
mov ax, 0C123H
and ax, 82F6H
OR
mov ax,0C123H
or ax,0E831H
XOR
mov ax,0C123H
xor ax,0E831H
NOT
not연산의 단한(unary) 연산이다. not 연산은 1의 보수를 찾아준다.
다른 비트 연산(Bitwise operation)들과는 달리 NOT 연산은
FLAGS 레지스터의 어떠한 값도 바꾸지 않는다.
TEST
TEST 명령어는 AND 연산을 수행하지만 결과는 보관하지 않는다.
단지 FLAGS 레지스터의 값 만 바꾼다.
ex) TEST 연산결과가 0이라면 ZF가 세트 된다.
Use of Bit arthimetric
-i번째 비트를 켠다
2^i 와 OR 연산을 한다.(이는 i번째 비트만 켜진(1인) 이진수 이다.)
-i번째 비트를 끈다
오직 i 번째 비트만 꺼진(0인) 이진수와 AND 연산을 한다.
이러한 피연산자를 마스크(mask)라고 한다.
-i번째 비트에 보수 취하기
2^i 와 XOR 연산을 한다.
AND & OR & XOR
mov ax,0C123H
or ax,8
and ax,0FFDFH
xor ax,8000H
or ax,0F00H
and ax,0FFF0H
xor ax,0F00FH
xor ax,0FFFFH
nibble은 1바이트의 절반으로 보통 4비트를 가르킴
AND to find Remainder
100/16의 나머지를 구하는 코드
2^i-1 인 마스크와 AND 연산을 하면 된다.
(나누는 수 16 미만의 비트의 크기가 나머지임을 이용)
mov eax,100
mov ebx,0000000FH
and ebx,eax
use CL register to modify data
EAX의 임의의 비트를 세트하는 코드.
BH에 세트가 될 비트의 위치가 저장되어 있다.
mov cl,bh
mov ebx,1
shl ebx,cl
or eax,ebx
EAX의 임의의 비트를 오프하는 코드
mov cl,bh
mov ebx,1
shl ebx,cl
not ebx
and eax,ebx
self XOR
자신을 XOR 연산하게 되면 항상 0이 된다.
MOV보다 XOR이 기계어 코드 크기가 작기 때문에 자주 사용된다.